package net.uzen.office.account.service;

import net.uzen.office.account.dao.AccountDao;
import net.uzen.office.account.model.Account;
import net.uzen.office.common.exception.SignInException;
import net.uzen.office.common.model.SessionInfo;

public class AccountServiceImpl implements AccountService {
	
	private AccountDao accountDao;
	
	public void setAccountDao(AccountDao accountDao) {
		this.accountDao = accountDao;
	}

	@Override
	public boolean signOut(Account account) {
		// TODO Auto-generated method stub
		// 로그 아웃 시에 시간을 기록한다.
		return accountDao.saveSignOutTime(account);
	}

	@Override
	public SessionInfo signIn(Account account) throws Exception {
		// TODO Auto-generated method stub
		// 로그 인 시도를 한다.
		// 정보가 있다면, 로그 인 시에 로그 인 시간을 기록하고, 세션 정보를 넘긴다.
		// 정보가 있는데, 계정이 잠겨있다면 오류 메시지를 던진다. (잠긴 계정)
		// 정보가 없다면, 재시도 할 수 있도록 실패 메시지에 최대 시도 횟수를 담아 넘긴다.
		// 정보가 없다면, 재시도 최대 시도 횟수를 넘겼는지 확인하고, 넘겼다면 새로운 비밀 번호를 메일로 전송한다.
		
		SessionInfo sessionInfo = accountDao.getSessionInfo(account);
		if(sessionInfo == null) {
			// 로그 인 페이지로 오류 회수를 담아 넘긴다.
			// 로그 인 시도 최대 가능 회수와 비교하여 예외에 담아 넘긴다.
			throw new SignInException();
		} else {
			// 로그 인 시간을 기록한다.
			// accountDao.saveSignInTime(account);
		}
		return sessionInfo;
	}

	@Override
	public boolean initializePassword(Account account) {
		// TODO Auto-generated method stub
		// 패스워드 초기화 한다.
		// 메일 서비스를 이용해 해당 사용자에게 임시로 할당된 패스워드를 발송한다.
		return false;
	}

}
